﻿// // https://github.com/NRatel/NRFramework.UI
//
// using System;
// using System.Collections.Generic;
// using UnityEngine;
//
// namespace NRFramework
// {
//     // [MonoSingletonSetting(HideFlags.NotEditable, "#UIManager#")]
//     public class UIManager
//     {
//         // public Dictionary<string, UIRoot> rootDict { private set; get; }
//         // public static UIManager Instance { get; private set; } 
//         // private UIRoot _uiRoot;
//
//         
//         // private void Init(UIRoot uiRoot)
//         // {
//         //     Instance = this;
//         //     _uiRoot = uiRoot;
//         //     // m_FocusingPanels = new List<UIPanel>();
//         //     // m_TempNewFocusingPanels = new List<UIPanel>();
//         // }
//         
//         // public UIRoot CreateRoot(string rootId, int startOrder, int endOrder)
//         // {
//         //     Debug.Assert(!rootDict.ContainsKey(rootId));    //uiRoot已存在
//         //     Debug.Assert(startOrder >= 0);                  //必须使startOrder >= 0
//         //     Debug.Assert(endOrder >= startOrder);           //必须使endOrder >= startOrder
//         //
//         //     UIRoot uiRoot = new UIRoot() { rootId = rootId, startOrder = startOrder, endOrder = endOrder };
//         //     // rootDict.Add(rootId, uiRoot);
//         //
//         //     return uiRoot;
//         // }
//         
//         public UIRoot GetRoot()
//         {
//             return _uiRoot;
//         }
//         
//         // public bool ExistRoot(string rootId)
//         // {
//         //     return rootDict.ContainsKey(rootId);
//         // }
//         
//         // public List<UIPanel> FilterPanels(Func<UIPanel, bool> filterFunc = null)
//         // {
//         //     List<UIPanel> panels = new List<UIPanel>();
//         //
//         //     foreach (KeyValuePair<string, UIPanel> kvPair2 in _uiRoot.panelDict)
//         //     {
//         //         if (filterFunc == null || filterFunc(kvPair2.Value))
//         //         {
//         //             panels.Add(kvPair2.Value);
//         //         }
//         //     }
//         //     return panels;
//         // }
//         
//         // public UIPanel FilterTopestPanel(Func<UIPanel, bool> filterFunc = null)
//         // {
//         //     List<UIPanel> panels = FilterPanels(filterFunc);
//         //
//         //     panels.Sort((a, b) => a.canvas.sortingOrder - b.canvas.sortingOrder);
//         //
//         //     return panels.Count > 0 ? panels[^1] : null;
//         // }
//         
//         // public UIPanel GetTopPanel()
//         // {
//         //     return FilterTopestPanel((panel)=> { return panel.showState != UIPanelShowState.Hidden; });
//         // }
//         
//         // public List<UIPanel> GetFocusingPanels()
//         // {
//         //     List<UIPanel> vaildPanels = new List<UIPanel>();
//         //     foreach (UIPanel panel in m_FocusingPanels)
//         //     {
//         //         if (panel != null) { vaildPanels.Add(panel); }
//         //     }
//         //     return vaildPanels;
//         // }
//         
//         // public int FindPanelComponent<T>(string rootId, string panelId, string compDefine, out T comp) where T : Component
//         // {
//         //     comp = null;
//         //     if (!ExistRoot(rootId)) { return FindCompErrorCode.NOT_EXIST_THIS_ROOT; }
//         //
//         //     UIRoot root = GetRoot(rootId);
//         //     return root.FindPanelComponent<T>(panelId, compDefine, out comp);
//         // }
//         //
//         // public int FindWidgetComponent<T>(string rootId, string panelId, string[] widgetIds, string compDefine, out T comp) where T : Component
//         // {
//         //     comp = null;
//         //     if (!ExistRoot(rootId)) { return FindCompErrorCode.NOT_EXIST_THIS_ROOT; }
//         //
//         //     UIRoot root = GetRoot(rootId);
//         //     return root.FindWidgetComponent<T>(panelId, widgetIds, compDefine, out comp);
//         // }
//         //
//         // public int FindComponentByPath<T>(string path, string compDefine, out T comp) where T : Component
//         // {
//         //     // comp = null;
//         //     // if (string.IsNullOrEmpty(path)) { return FindCompErrorCode.VIEW_PATH_IS_NULL_OR_EMPTY; }
//         //     // string[] strs = path.Split("/");
//         //     // if (strs.Length < 2) { return FindCompErrorCode.VIEW_PATH_IS_TOO_SHORT; }
//         //     // string rootId = strs[0];
//         //     // string panelId = strs[1];
//         //     //
//         //     // if (strs.Length > 2)
//         //     // {
//         //     //     string[] widgetIds = new string[strs.Length - 2];
//         //     //     for (int i = 0; i < strs.Length - 2; i++)
//         //     //     { widgetIds[i] = strs[i + 2]; }
//         //     //     return FindWidgetComponent<T>(rootId, panelId, widgetIds, compDefine, out comp);
//         //     // }
//         //     // else
//         //     // {
//         //     //     return FindPanelComponent<T>(rootId, panelId, compDefine, out comp);
//         //     // }
//         // }
//         
//
//         
//         // public void OnUpdate()
//         // {
//         //     if (Input.GetKeyDown(KeyCode.Escape))
//         //     {
//         //         UIPanel topestPanel = FilterTopestPanel((panel) => 
//         //         { return panel.showState != UIPanelShowState.Hidden && panel.panelBehaviour.escPressEventType != UIPanelEscPressEventType.DontCheck; });
//         //
//         //         if (topestPanel == null) { return; }
//         //         if (topestPanel.showState != UIPanelShowState.Idle) { return; }
//         //
//         //         topestPanel.DoEscPress();
//         //     }
//         // }
//     }
// }